import pandas as pd
import numpy as np
from scipy import stats
from matplotlib import pyplot as plt
import seaborn as sns
sns.set(style='whitegrid', rc={"grid.linewidth": 0.1})
sns.set_context("paper", font_scale=1.8)
Исследуемые параметры:
df_plot = df = pd.read_csv('../Datasets/improved_08_2020.csv',index_col=0)
target_columns = ['AGE','GT','SBP','DBP','MBP','HR','IA','SpO2','Weight','Cl-','LACT','AMYL','ALT','AST','APTV','VOL_%','CI','B_surface','Diur_p_kg', 'OUTCOME']
df = df[['ID','Day']].join(df[target_columns])
df.columns = target_columns = ['ID','Day','Возраст','GT','САД', 'ДАД','СрАД','ЧСС','ИА','SpO2','Масса тела','Cl-','Лактат','Амилаза','АЛТ','АСТ','АЧТВ','Инфузия, % от N','КИ','Площадь тела','Диурез, мл/кг', 'OUTCOME']
df[2:].describe().T
| count | mean | std | min | 25% | 50% | 75% | max | |
|---|---|---|---|---|---|---|---|---|
| ID | 1390.0 | 89.139568 | 53.483134 | 1.000000 | 56.000000 | 84.000000 | 119.000000 | 216.000000 |
| Day | 1390.0 | 7.479137 | 7.851433 | 1.000000 | 2.000000 | 5.000000 | 9.000000 | 49.000000 |
| Возраст | 1390.0 | 9.973351 | 5.452043 | 0.250000 | 5.000000 | 11.000000 | 15.000000 | 18.000000 |
| GT | 1390.0 | 0.323022 | 0.467799 | 0.000000 | 0.000000 | 0.000000 | 1.000000 | 1.000000 |
| САД | 1390.0 | 111.279856 | 15.730912 | 45.000000 | 100.000000 | 110.000000 | 120.000000 | 170.000000 |
| ДАД | 1390.0 | 64.853237 | 12.544982 | 5.000000 | 58.000000 | 65.000000 | 73.000000 | 119.000000 |
| СрАД | 1390.0 | 80.328777 | 12.699138 | 26.333333 | 73.333333 | 80.166667 | 88.333333 | 120.666667 |
| ЧСС | 1390.0 | 105.741727 | 23.503876 | 24.000000 | 90.000000 | 106.000000 | 120.000000 | 186.000000 |
| ИА | 1390.0 | 0.975362 | 0.294496 | 0.200000 | 0.781818 | 0.946333 | 1.105263 | 3.100000 |
| SpO2 | 1390.0 | 98.374820 | 3.334239 | 26.000000 | 98.000000 | 99.000000 | 100.000000 | 110.000000 |
| Масса тела | 1390.0 | 40.670504 | 22.671490 | 6.000000 | 19.000000 | 40.000000 | 60.000000 | 103.000000 |
| Cl- | 1390.0 | 108.032734 | 39.348603 | 0.000000 | 103.825000 | 109.000000 | 115.000000 | 1102.000000 |
| Лактат | 1390.0 | 1.275676 | 1.708999 | -1.100000 | 0.000000 | 1.100000 | 1.700000 | 25.000000 |
| Амилаза | 1390.0 | 99.058424 | 167.838425 | 0.000000 | 0.000000 | 53.400000 | 118.000000 | 2520.000000 |
| АЛТ | 1390.0 | 82.039957 | 163.595932 | 0.000000 | 21.500000 | 39.300000 | 78.325000 | 2865.000000 |
| АСТ | 1390.0 | 105.801597 | 210.000717 | 0.000000 | 31.300000 | 50.600000 | 98.300000 | 2458.300000 |
| АЧТВ | 1390.0 | 25.710683 | 17.771002 | 0.000000 | 20.587500 | 30.000000 | 35.000000 | 162.000000 |
| Инфузия, % от N | 1390.0 | 123.688991 | 53.620712 | 0.000000 | 94.802083 | 117.104186 | 143.567130 | 647.916667 |
| КИ | 1390.0 | 8.137281 | 32.743989 | 0.000000 | 0.000000 | 4.080000 | 5.000000 | 956.600000 |
| Площадь тела | 1390.0 | 0.955208 | 0.333813 | 0.250000 | 0.670000 | 1.030000 | 1.270000 | 1.450000 |
| Диурез, мл/кг | 1390.0 | 55.151606 | 35.221183 | 0.000000 | 30.785256 | 46.666667 | 72.000000 | 280.000000 |
df_plot = df_plot[['ID','AGE','SEX','OUTCOME','Weight','Day']].groupby('ID',as_index=False).max()
sns.boxplot(x=df_plot['OUTCOME'].replace({'Died':'умершие','Survived':'выжившие'}),y = df_plot['AGE'])
plt.ylabel('Возраст')
plt.xlabel('Исходы')
plt.show()
sns.boxplot(x=df_plot['OUTCOME'].replace({'Died':'умершие','Survived':'выжившие'}),y = df_plot['Weight'])
plt.ylabel('Масса тела')
plt.xlabel('Исходы')
plt.show()
sns.boxplot(x=df_plot['SEX'].replace({0:'девочки',1:'мальчики'}),y = df_plot['AGE'])
plt.ylabel('Возраст')
plt.xlabel('Пол')
plt.show()
sns.boxplot(x=df_plot['SEX'].replace({0:'девочки',1:'мальчики'}),y = df_plot['Weight'])
plt.ylabel('Масса тела')
plt.xlabel('Пол')
plt.show()
Просмотр первых 5 записей
# 1й день - день поступления пациента
df_1 = df[df['Day']==1].copy()
df_1.head()
| ID | Day | Возраст | GT | САД | ДАД | СрАД | ЧСС | ИА | SpO2 | ... | Лактат | Амилаза | АЛТ | АСТ | АЧТВ | Инфузия, % от N | КИ | Площадь тела | Диурез, мл/кг | OUTCOME | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 0 | 1 | 1 | 6.00 | 0.0 | 100.0 | 65.0 | 76.666667 | 108.0 | 1.080000 | 100.0 | ... | 0.0 | 94.2 | 50.2 | 86.0 | 23.6 | 130.487805 | 0.0 | 0.7300 | 43.500000 | Survived |
| 6 | 2 | 1 | 0.42 | 0.0 | 100.0 | 66.0 | 77.333333 | 115.0 | 1.150000 | 100.0 | ... | 0.0 | 18.3 | 31.3 | 46.0 | 31.5 | 124.255952 | 5.0 | 0.2908 | 23.571429 | Survived |
| 12 | 3 | 1 | 13.00 | 1.0 | 120.0 | 80.0 | 93.333333 | 80.0 | 0.666667 | 100.0 | ... | 0.0 | 38.8 | 40.8 | 90.3 | 26.0 | 73.750000 | 0.0 | 1.1500 | 50.909091 | Survived |
| 31 | 4 | 1 | 8.00 | 0.0 | 110.0 | 65.0 | 80.000000 | 124.0 | 1.127273 | 100.0 | ... | 0.0 | 15.3 | 11.2 | 35.3 | 29.1 | 294.736842 | 5.0 | 0.8500 | 25.666667 | Survived |
| 36 | 5 | 1 | 11.00 | 1.0 | 115.0 | 75.0 | 88.333333 | 110.0 | 0.956522 | 98.0 | ... | 0.0 | 65.6 | 27.4 | 52.5 | 26.9 | 36.666667 | 0.0 | 1.0300 | 29.400000 | Survived |
5 rows × 22 columns
Описательная статистика: группа 1
# Пациенты, которые получали ГТ имеют параметр GT=1
df_1_1 = df_1[df_1['GT']==1].loc[:,target_columns]
df_1_1.describe().T
| count | mean | std | min | 25% | 50% | 75% | max | |
|---|---|---|---|---|---|---|---|---|
| ID | 88.0 | 106.375000 | 64.528228 | 3.000000 | 47.750000 | 99.500000 | 162.250000 | 215.000000 |
| Day | 88.0 | 1.000000 | 0.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 |
| Возраст | 88.0 | 8.797348 | 5.160294 | 0.250000 | 4.000000 | 8.500000 | 13.000000 | 17.000000 |
| GT | 88.0 | 1.000000 | 0.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 |
| САД | 88.0 | 104.795455 | 21.548213 | 45.000000 | 90.000000 | 106.500000 | 118.500000 | 155.000000 |
| ДАД | 88.0 | 60.034091 | 15.818256 | 17.000000 | 50.000000 | 60.500000 | 70.000000 | 100.000000 |
| СрАД | 88.0 | 74.954545 | 16.927098 | 26.333333 | 66.666667 | 77.666667 | 85.666667 | 113.333333 |
| ЧСС | 88.0 | 111.465909 | 24.578726 | 54.000000 | 96.000000 | 112.500000 | 122.000000 | 172.000000 |
| ИА | 88.0 | 1.128057 | 0.422854 | 0.412903 | 0.855820 | 1.078499 | 1.273694 | 2.800000 |
| SpO2 | 88.0 | 97.272727 | 8.681765 | 26.000000 | 98.000000 | 99.000000 | 100.000000 | 100.000000 |
| Масса тела | 88.0 | 36.119318 | 22.140875 | 6.000000 | 18.000000 | 30.000000 | 51.250000 | 100.000000 |
| Cl- | 88.0 | 90.795455 | 44.170079 | 0.000000 | 100.675000 | 105.700000 | 111.000000 | 200.400000 |
| Лактат | 88.0 | 1.955682 | 2.824599 | 0.000000 | 0.000000 | 1.250000 | 2.800000 | 17.000000 |
| Амилаза | 88.0 | 34.459091 | 66.605895 | 0.000000 | 0.000000 | 0.000000 | 43.975000 | 329.200000 |
| АЛТ | 88.0 | 144.100000 | 397.108247 | 0.000000 | 15.650000 | 31.650000 | 95.325000 | 2865.000000 |
| АСТ | 88.0 | 208.950000 | 428.146292 | 0.000000 | 27.875000 | 58.200000 | 162.650000 | 2458.300000 |
| АЧТВ | 88.0 | 16.502273 | 19.595425 | 0.000000 | 0.000000 | 0.000000 | 30.000000 | 90.000000 |
| Инфузия, % от N | 88.0 | 96.841263 | 67.828810 | 0.000000 | 54.614504 | 79.737634 | 116.593750 | 353.009259 |
| КИ | 88.0 | 19.281364 | 106.323936 | 0.000000 | 0.000000 | 0.000000 | 5.000000 | 956.600000 |
| Площадь тела | 88.0 | 0.943977 | 0.310832 | 0.250000 | 0.610000 | 1.030000 | 1.210000 | 1.450000 |
| Диурез, мл/кг | 88.0 | 41.803068 | 32.895691 | 0.000000 | 13.722222 | 33.458333 | 63.072082 | 179.166667 |
Описательная статистика: группа 2
# Пациенты, которые не получали ГТ имеют параметр GT=0
df_1_0 = df_1[df_1['GT']==0].loc[:,target_columns]
df_1_0.describe().T
| count | mean | std | min | 25% | 50% | 75% | max | |
|---|---|---|---|---|---|---|---|---|
| ID | 115.0 | 102.408696 | 59.924499 | 1.000000 | 53.000000 | 102.000000 | 150.000000 | 216.000000 |
| Day | 115.0 | 1.000000 | 0.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 |
| Возраст | 115.0 | 9.192725 | 5.549760 | 0.250000 | 4.000000 | 9.000000 | 14.500000 | 18.000000 |
| GT | 115.0 | 0.000000 | 0.000000 | 0.000000 | 0.000000 | 0.000000 | 0.000000 | 0.000000 |
| САД | 115.0 | 106.460870 | 17.396454 | 70.000000 | 92.500000 | 110.000000 | 120.000000 | 159.000000 |
| ДАД | 115.0 | 63.678261 | 13.223814 | 30.000000 | 55.500000 | 60.000000 | 70.000000 | 119.000000 |
| СрАД | 115.0 | 77.939130 | 13.730104 | 43.333333 | 68.833333 | 77.333333 | 86.333333 | 117.333333 |
| ЧСС | 115.0 | 109.913043 | 22.587671 | 40.000000 | 92.000000 | 110.000000 | 125.000000 | 165.000000 |
| ИА | 115.0 | 1.069361 | 0.327999 | 0.407692 | 0.825121 | 1.000000 | 1.211702 | 2.133333 |
| SpO2 | 115.0 | 98.252174 | 3.942222 | 70.000000 | 98.000000 | 100.000000 | 100.000000 | 100.000000 |
| Масса тела | 115.0 | 35.856522 | 21.586197 | 6.000000 | 16.000000 | 30.000000 | 50.000000 | 103.000000 |
| Cl- | 115.0 | 95.575652 | 38.278129 | 0.000000 | 100.850000 | 107.000000 | 113.000000 | 148.000000 |
| Лактат | 115.0 | 1.716522 | 3.064652 | 0.000000 | 0.000000 | 1.000000 | 2.500000 | 25.000000 |
| Амилаза | 115.0 | 35.780870 | 61.518358 | 0.000000 | 0.000000 | 15.300000 | 50.850000 | 533.500000 |
| АЛТ | 115.0 | 122.497826 | 236.534967 | 0.000000 | 12.600000 | 36.000000 | 97.250000 | 1260.700000 |
| АСТ | 115.0 | 172.971043 | 358.602569 | 0.000000 | 0.000000 | 53.100000 | 140.700000 | 2242.000000 |
| АЧТВ | 115.0 | 17.027826 | 16.857767 | 0.000000 | 0.000000 | 23.500000 | 31.000000 | 58.000000 |
| Инфузия, % от N | 115.0 | 95.429568 | 63.586685 | 0.000000 | 56.039136 | 79.166667 | 122.143500 | 295.701754 |
| КИ | 115.0 | 6.584783 | 32.661305 | 0.000000 | 0.000000 | 0.000000 | 1.250000 | 320.000000 |
| Площадь тела | 115.0 | 0.883384 | 0.334534 | 0.250000 | 0.610000 | 0.850000 | 1.210000 | 1.390000 |
| Диурез, мл/кг | 115.0 | 39.011873 | 34.131423 | 0.000000 | 15.250000 | 30.303030 | 54.916667 | 205.384615 |
sns.barplot(data = [[df_1_1.shape[0]],[df_1_0.shape[0]]])
plt.title('Размер групп');
figure,ax = plt.subplots(len(target_columns[4:-1]),2,figsize=(14,60))
sns.set(style='whitegrid', rc={"grid.linewidth": 0.1})
sns.set_context("paper", font_scale=1.8)
for k,i in enumerate(target_columns[4:-1]):
sns.histplot(df_1[df_1['GT']==0][i],bins=10,ax=ax[k,0])
sns.histplot(df_1[df_1['GT']==1][i],bins=10,ax=ax[k,1])
ax[k,0].set_title(i+' (без гормонотерапии)')
ax[k,1].set_title(i+' (с гормонотерапией)')
ax[k,0].set(ylabel='Количество')
ax[k,1].set(ylabel='Количество')
plt.tight_layout()
for k,i in enumerate(target_columns[4:-1]):
group0 = df_1[df_1['GT']==0][i]
group1 = df_1[df_1['GT']==1][i]
alpha = 0.05
test_value, p = stats.kruskal(group0,group1)
if alpha<p:
print(f'Разница по параметру {i} между двумя группами не доказана.')
print(f'\tСтатистика теста = {test_value}, p-значение = {p}')
else:
print(f'По параметру {i} наблюдается статистически достоверная разница между двумя группами.')
print(f'\tСтатистика теста = {test_value}, p-значение = {p}')
Разница по параметру САД между двумя группами не доказана. Статистика теста = 0.11443160099865324, p-значение = 0.7351541512429405 Разница по параметру ДАД между двумя группами не доказана. Статистика теста = 1.112126748561025, p-значение = 0.2916201074564546 Разница по параметру СрАД между двумя группами не доказана. Статистика теста = 0.523578417859714, p-значение = 0.46931920967899676 Разница по параметру ЧСС между двумя группами не доказана. Статистика теста = 0.3353400637681386, p-значение = 0.5625314557621811 Разница по параметру ИА между двумя группами не доказана. Статистика теста = 0.6680609195051993, p-значение = 0.41372847665338275 Разница по параметру SpO2 между двумя группами не доказана. Статистика теста = 0.09908352497067502, p-значение = 0.7529322240495818 Разница по параметру Масса тела между двумя группами не доказана. Статистика теста = 0.003787269311534843, p-значение = 0.9509285271363441 Разница по параметру Cl- между двумя группами не доказана. Статистика теста = 0.5519885703080256, p-значение = 0.45750630191163844 Разница по параметру Лактат между двумя группами не доказана. Статистика теста = 0.37711817743480913, p-значение = 0.5391495885812169 Разница по параметру Амилаза между двумя группами не доказана. Статистика теста = 1.8594000604497372, p-значение = 0.17269405785441783 Разница по параметру АЛТ между двумя группами не доказана. Статистика теста = 0.0009157667491814055, p-значение = 0.9758583907976189 Разница по параметру АСТ между двумя группами не доказана. Статистика теста = 0.4442318284015269, p-значение = 0.5050869723538601 Разница по параметру АЧТВ между двумя группами не доказана. Статистика теста = 0.6017372311236614, p-значение = 0.43791596033723235 Разница по параметру Инфузия, % от N между двумя группами не доказана. Статистика теста = 0.00024560144789700233, p-значение = 0.9874963230100028 Разница по параметру КИ между двумя группами не доказана. Статистика теста = 2.1548614517932045, p-значение = 0.1421192624455615 Разница по параметру Площадь тела между двумя группами не доказана. Статистика теста = 1.490040773820666, p-значение = 0.2222101336640354 Разница по параметру Диурез, мл/кг между двумя группами не доказана. Статистика теста = 0.6407663428469124, p-значение = 0.4234334295147887
# Составление списков пациентов получавших ГТ более 1 дня и только один (первый) день
# выбираем из датасета df Day>1, GT = 1 и только тех пациентов, которые находятся в списке df_1_gt_1 (получали ГТ в первый день)
a = df.loc[(df['Day']>1)&(df['ID'].isin(df_1_gt_1)),:].groupby('ID', as_index=False).max()
df_gt_more1day = df.loc[df.ID.isin(a.loc[a.GT==1,'ID']),:]
print(f'{df_gt_more1day["ID"].nunique()} получали ГТ более 1 дня.')
df_gt_only1day = df.loc[df.ID.isin(a.loc[a.GT==0,'ID']),:]
print(f'{df_gt_only1day["ID"].nunique()} получали ГТ только в 1й день')
67 получали ГТ более 1 дня. 12 получали ГТ только в 1й день
sns.barplot(data = [[df_gt_more1day["ID"].nunique()],[df_gt_only1day["ID"].nunique()]])
plt.title('Размер групп');
Описательная статистика: 1 группа
# Описательная статистика пациентов, которые получали ГТ только в 1й день
df_gt_only1day[target_columns[2:]].describe().T
| count | mean | std | min | 25% | 50% | 75% | max | |
|---|---|---|---|---|---|---|---|---|
| Возраст | 62.0 | 7.338710 | 3.922167 | 3.000000 | 4.000000 | 6.125000 | 11.750000 | 15.000000 |
| GT | 62.0 | 0.193548 | 0.398304 | 0.000000 | 0.000000 | 0.000000 | 0.000000 | 1.000000 |
| САД | 62.0 | 110.774194 | 13.216258 | 80.000000 | 102.750000 | 113.500000 | 118.750000 | 150.000000 |
| ДАД | 62.0 | 63.887097 | 12.420376 | 35.000000 | 55.000000 | 63.000000 | 70.000000 | 100.000000 |
| СрАД | 62.0 | 79.516129 | 11.562561 | 50.000000 | 73.083333 | 77.500000 | 85.750000 | 116.666667 |
| ЧСС | 62.0 | 101.145161 | 19.627554 | 60.000000 | 89.000000 | 98.500000 | 118.250000 | 165.000000 |
| ИА | 62.0 | 0.933377 | 0.257408 | 0.500000 | 0.780200 | 0.865385 | 1.065152 | 2.062500 |
| SpO2 | 62.0 | 98.774194 | 2.321809 | 90.000000 | 98.000000 | 99.000000 | 100.000000 | 110.000000 |
| Масса тела | 62.0 | 32.741935 | 22.338627 | 12.000000 | 15.000000 | 21.500000 | 57.500000 | 70.000000 |
| Cl- | 62.0 | 100.972581 | 27.622521 | 0.000000 | 101.175000 | 106.100000 | 110.750000 | 129.000000 |
| Лактат | 62.0 | 0.732258 | 1.322538 | 0.000000 | 0.000000 | 0.000000 | 1.300000 | 7.400000 |
| Амилаза | 62.0 | 43.848387 | 48.114034 | 0.000000 | 0.000000 | 33.000000 | 64.475000 | 186.000000 |
| АЛТ | 62.0 | 59.146774 | 69.878751 | 5.700000 | 18.975000 | 27.200000 | 74.900000 | 370.300000 |
| АСТ | 62.0 | 81.050000 | 87.296940 | 16.800000 | 38.000000 | 52.500000 | 98.300000 | 604.200000 |
| АЧТВ | 62.0 | 27.727419 | 12.050977 | 0.000000 | 26.962500 | 29.200000 | 33.675000 | 45.100000 |
| Инфузия, % от N | 62.0 | 106.657416 | 41.176714 | 16.607595 | 82.251450 | 107.430341 | 131.557349 | 205.625000 |
| КИ | 62.0 | 2.338710 | 6.121565 | 0.000000 | 0.000000 | 0.000000 | 4.375000 | 40.000000 |
| Площадь тела | 62.0 | 1.062903 | 0.245993 | 0.550000 | 0.910000 | 1.090000 | 1.255000 | 1.390000 |
| Диурез, мл/кг | 62.0 | 58.592842 | 37.278234 | 5.000000 | 29.060526 | 51.416667 | 83.333333 | 179.166667 |
Описательная статистика: 2 группа
# Описательная статистика пациентов, которые получали ГТ в 1й и любой (любые) последующие дни
df_gt_more1day[target_columns[2:]].describe().T
| count | mean | std | min | 25% | 50% | 75% | max | |
|---|---|---|---|---|---|---|---|---|
| Возраст | 548.0 | 10.438564 | 5.361711 | 0.250000 | 5.000000 | 12.000000 | 16.000000 | 17.000000 |
| GT | 548.0 | 0.653285 | 0.476359 | 0.000000 | 0.000000 | 1.000000 | 1.000000 | 1.000000 |
| САД | 548.0 | 112.124088 | 17.412910 | 45.000000 | 104.000000 | 112.500000 | 120.000000 | 165.000000 |
| ДАД | 548.0 | 65.399635 | 13.792632 | 5.000000 | 60.000000 | 65.000000 | 75.000000 | 100.000000 |
| СрАД | 548.0 | 80.974453 | 14.174995 | 26.333333 | 73.333333 | 81.666667 | 90.083333 | 120.666667 |
| ЧСС | 548.0 | 105.155109 | 23.767145 | 41.000000 | 88.750000 | 105.000000 | 120.000000 | 186.000000 |
| ИА | 548.0 | 0.966663 | 0.312359 | 0.412903 | 0.775182 | 0.909091 | 1.090909 | 3.100000 |
| SpO2 | 548.0 | 98.155109 | 4.290591 | 26.000000 | 98.000000 | 99.000000 | 100.000000 | 100.000000 |
| Масса тела | 548.0 | 42.937956 | 22.495475 | 6.000000 | 20.000000 | 45.000000 | 60.000000 | 100.000000 |
| Cl- | 548.0 | 108.689507 | 52.394270 | 0.000000 | 103.000000 | 108.000000 | 114.250000 | 1102.000000 |
| Лактат | 548.0 | 1.426642 | 2.010444 | 0.000000 | 0.000000 | 1.200000 | 1.900000 | 20.000000 |
| Амилаза | 548.0 | 129.325255 | 212.679433 | 0.000000 | 0.000000 | 49.300000 | 172.025000 | 1940.000000 |
| АЛТ | 548.0 | 88.304927 | 193.484734 | 0.000000 | 23.437500 | 42.800000 | 78.750000 | 2865.000000 |
| АСТ | 548.0 | 121.884215 | 234.818416 | 0.000000 | 34.975000 | 55.500000 | 116.000000 | 2458.300000 |
| АЧТВ | 548.0 | 23.420712 | 17.319862 | 0.000000 | 0.000000 | 27.800000 | 34.050000 | 120.000000 |
| Инфузия, % от N | 548.0 | 120.204809 | 51.909820 | 0.000000 | 89.583333 | 112.729691 | 138.134470 | 552.083333 |
| КИ | 548.0 | 9.804051 | 25.599881 | 0.000000 | 0.000000 | 4.500000 | 7.500000 | 246.000000 |
| Площадь тела | 548.0 | 1.013130 | 0.314869 | 0.250000 | 0.790000 | 1.090000 | 1.270000 | 1.450000 |
| Диурез, мл/кг | 548.0 | 47.774219 | 28.806952 | 1.571429 | 28.000000 | 42.500000 | 58.150106 | 179.500000 |
a = pd.DataFrame(df_gt_more1day[target_columns[2:-1]].median()).rename(columns = {0:'ГТ\: 1 и последующие дни'})
a_ = []
for i in target_columns[2:-1]:
a_.append(df_gt_only1day[df_gt_only1day[i]>0][i].median())
a['ГТ: только 1й день'] = a_
a
| ГТ\: 1 и последующие дни | ГТ: только 1й день | |
|---|---|---|
| Возраст | 12.000000 | 6.125000 |
| GT | 1.000000 | 1.000000 |
| САД | 112.500000 | 113.500000 |
| ДАД | 65.000000 | 63.000000 |
| СрАД | 81.666667 | 77.500000 |
| ЧСС | 105.000000 | 98.500000 |
| ИА | 0.909091 | 0.865385 |
| SpO2 | 99.000000 | 99.000000 |
| Масса тела | 45.000000 | 21.500000 |
| Cl- | 108.000000 | 107.150000 |
| Лактат | 1.200000 | 1.650000 |
| Амилаза | 49.300000 | 51.000000 |
| АЛТ | 42.800000 | 27.200000 |
| АСТ | 55.500000 | 52.500000 |
| АЧТВ | 27.800000 | 30.000000 |
| Инфузия, % от N | 112.729691 | 107.430341 |
| КИ | 4.500000 | 5.000000 |
| Площадь тела | 1.090000 | 1.090000 |
| Диурез, мл/кг | 42.500000 | 51.416667 |
# for k,i in enumerate(target_columns[3:]):
# print('Параметр =',i,'\nСреднее = ',df_gt_more1day[i].mean(),'std =',df_gt_more1day[i].std(ddof=1))
figure,ax = plt.subplots(len(target_columns[3:]),4,figsize=(19,70))
for k,i in enumerate(target_columns[3:]):
try:
sns.histplot(df_gt_more1day[i],bins=10,ax=ax[k,0])
interval = np.linspace(0,1,int(df_gt_more1day[i].count()))
x = stats.norm.ppf(np.linspace(0,1,int(df_gt_more1day[i].count())),loc=df_gt_more1day[i].mean(),scale=df_gt_more1day[i].std(ddof=1))
y = np.quantile(df_gt_more1day[i],interval)
sns.lineplot(x = x,y = x,ax=ax[k,1],color='r')
sns.lineplot(x = x,y = y,ax=ax[k,1],color='b')
sns.scatterplot(x = np.linspace(0,int(df_gt_more1day[i].max()),int(df_gt_more1day[i].count())),y = df_gt_more1day[i],ax=ax[k,1],color='grey')
sns.histplot(df_gt_only1day[i],bins=10,ax=ax[k,2])
interval = np.linspace(0,1,int(df_gt_only1day[i].count()))
x = stats.norm.ppf(np.linspace(0,1,int(df_gt_only1day[i].count())),loc=df_gt_only1day[i].mean(),scale=df_gt_only1day[i].std(ddof=1))
y = np.quantile(df_gt_only1day[i],interval)
sns.lineplot(x = x,y = x,ax=ax[k,3],color='r')
sns.lineplot(x = x,y = y,ax=ax[k,3],color='b')
sns.scatterplot(x = np.linspace(0,int(df_gt_only1day[i].max()),int(df_gt_only1day[i].count())),y = df_gt_only1day[i],ax=ax[k,3],color='grey')
ax[k,0].set_title(i+' (ГТ более 1 дня)')
ax[k,1].set_title(i+' (ГТ более 1 дня: QQ-plot)')
ax[k,2].set_title(i+' (ГТ только 1 день)')
ax[k,3].set_title(i+' (ГТ только 1 день: QQ-plot)')
plt.tight_layout()
except Exception:
ax[k,0].set_title(i+' (ГТ более 1 дня)')
ax[k,1].set_title(i+' (ГТ более 1 дня: QQ-plot)')
ax[k,2].set_title(i+' (ГТ только 1 день)')
ax[k,3].set_title(i+' (ГТ только 1 день: QQ-plot)')
plt.tight_layout()
pass
for k,i in enumerate(target_columns[3:]):
group0 = df_gt_more1day[i]
group1 = df_gt_only1day[i]
alpha = 0.05
test_value, p = stats.kruskal(group0,group1)
if alpha<p:
print(f'Разница по параметру {i} между двумя группами не доказана.')
print(f'\tСтатистика теста = {test_value}, p-значение = {p}')
else:
print(f'По параметру {i} наблюдается статистически достоверная разница между двумя группами.')
print(f'\tСтатистика теста = {test_value}, p-значение = {p}')
По параметру САД наблюдается статистически достоверная разница между двумя группами. Статистика теста = 26.218567643278483, p-значение = 3.0487697376477805e-07 По параметру ДАД наблюдается статистически достоверная разница между двумя группами. Статистика теста = 19.304463036624547, p-значение = 1.1144554794520444e-05 По параметру СрАД наблюдается статистически достоверная разница между двумя группами. Статистика теста = 25.139356409216873, p-значение = 5.333320107240081e-07 Разница по параметру ЧСС между двумя группами не доказана. Статистика теста = 3.088306044690933, p-значение = 0.07885686053906409 По параметру ИА наблюдается статистически достоверная разница между двумя группами. Статистика теста = 16.206544906897964, p-значение = 5.6797546574518804e-05 По параметру SpO2 наблюдается статистически достоверная разница между двумя группами. Статистика теста = 5.7300979129513445, p-значение = 0.016676552788156995 По параметру Масса тела наблюдается статистически достоверная разница между двумя группами. Статистика теста = 38.85301635175421, p-значение = 4.569472943423873e-10 По параметру Cl- наблюдается статистически достоверная разница между двумя группами. Статистика теста = 23.1271372459541, p-значение = 1.516354462462358e-06 По параметру Лактат наблюдается статистически достоверная разница между двумя группами. Статистика теста = 11.888308394437699, p-значение = 0.0005648740017549229 Разница по параметру Амилаза между двумя группами не доказана. Статистика теста = 1.826725211334726, p-значение = 0.17651483739733703 По параметру АЛТ наблюдается статистически достоверная разница между двумя группами. Статистика теста = 19.08759239256028, p-значение = 1.2485395985915131e-05 По параметру АСТ наблюдается статистически достоверная разница между двумя группами. Статистика теста = 28.729381279015403, p-значение = 8.323135144674942e-08 По параметру АЧТВ наблюдается статистически достоверная разница между двумя группами. Статистика теста = 5.946116217335522, p-значение = 0.014749747952607322 По параметру Инфузия, % от N наблюдается статистически достоверная разница между двумя группами. Статистика теста = 13.994339065132305, p-значение = 0.00018336186131891858 По параметру КИ наблюдается статистически достоверная разница между двумя группами. Статистика теста = 6.931944636150558, p-значение = 0.00846695781657716 По параметру Площадь тела наблюдается статистически достоверная разница между двумя группами. Статистика теста = 20.060360127079182, p-значение = 7.503593119764976e-06 По параметру Диурез, мл/кг наблюдается статистически достоверная разница между двумя группами. Статистика теста = 7.630286953775266, p-значение = 0.005739617009100049
Между двумя группами обнаружены статистически значимые различия по большинству параметров:
Обращает на себя внимание то, что в этой группе снижены КИ и волемическая нагрузка.
df_only1_users = df.loc[(df.Day==1) & (df.GT==1),'ID'].unique()
df_only1 = df.loc[df.ID.isin(df_only1_users),:]
df_not1_users = df.loc[((df.Day>1) & (df.GT==1))&((df.Day==1) & (df.GT==0)),'ID'].unique()
df_not1 = df.loc[df.ID.isin(df_not1_users),:]
print(f' Размер первой группы = {df_only1.shape[0]}')
Размер первой группы = 619
print(f' Размер первой группы = {df_not1.shape[0]}')
Размер первой группы = 0
df_only1_users = df.loc[df.GT==1,'ID'].unique()
df_only1 = df.loc[df.ID.isin(df_only1_users),:]
df_noGT_users = df.groupby('ID',as_index=False).max()
df_noGT_users = df_noGT_users.loc[df_noGT_users.GT==0,'ID']
df_noGT = df.loc[df.ID.isin(df_noGT_users),:]
print('Размер 1 и 2 групп: ',df_only1.shape[0],'и',df_noGT.shape[0])
sns.barplot(data = [[df_only1.shape[0]],[df_noGT.shape[0]]])
plt.title('Размер групп');
Размер 1 и 2 групп: 950 и 442
# for k,i in enumerate(target_columns[3:]):
# print('Параметр =',i,'\nСреднее = ',df_gt_more1day[i].mean(),'std =',df_gt_more1day[i].std(ddof=1))
figure,ax = plt.subplots(len(target_columns[3:]),4,figsize=(19,70))
for k,i in enumerate(target_columns[3:]):
try:
sns.histplot(df_only1[i],bins=10,ax=ax[k,0])
interval = np.linspace(0,1,int(df_only1[i].count()))
x = stats.norm.ppf(np.linspace(0,1,int(df_only1[i].count())),loc=df_only1[i].mean(),scale=df_only1[i].std(ddof=1))
y = np.quantile(df_only1[i],interval)
sns.lineplot(x = x,y = x,ax=ax[k,1],color='r')
sns.lineplot(x = x,y = y,ax=ax[k,1],color='b')
sns.scatterplot(x = np.linspace(0,int(df_only1[i].max()),int(df_only1[i].count())),y = df_only1[i],ax=ax[k,1],color='grey')
sns.histplot(df_noGT[i],bins=10,ax=ax[k,2])
interval = np.linspace(0,1,int(df_noGT[i].count()))
x = stats.norm.ppf(np.linspace(0,1,int(df_noGT[i].count())),loc=df_noGT[i].mean(),scale=df_noGT[i].std(ddof=1))
y = np.quantile(df_noGT[i],interval)
sns.lineplot(x = x,y = x,ax=ax[k,3],color='r')
sns.lineplot(x = x,y = y,ax=ax[k,3],color='b')
sns.scatterplot(x = np.linspace(0,int(df_noGT[i].max()),int(df_noGT[i].count())),y = df_noGT[i],ax=ax[k,3],color='grey')
ax[k,0].set_title(i+' (получали ГТ)')
ax[k,1].set_title(i+' (получали ГТ: QQ-plot)')
ax[k,2].set_title(i+' (не получали ГТ)')
ax[k,3].set_title(i+' (не получали ГТ: QQ-plot)')
plt.tight_layout()
except Exception:
ax[k,0].set_title(i+' (получали ГТ)')
ax[k,1].set_title(i+' (получали ГТ: QQ-plot)')
ax[k,2].set_title(i+' (не получали ГТ)')
ax[k,3].set_title(i+' (не получали ГТ: QQ-plot)')
plt.tight_layout()
pass
for k,i in enumerate(target_columns[3:]):
group0 = df_only1[i]
group1 = df_noGT[i]
alpha = 0.05
test_value, p = stats.kruskal(group0,group1)
if alpha<p:
print(f'Разница по параметру {i} между двумя группами не доказана.')
print(f'\tСтатистика теста = {test_value}, p-значение = {p}')
else:
print(f'По параметру {i} наблюдается статистически достоверная разница между двумя группами.')
print(f'\tСтатистика теста = {test_value}, p-значение = {p}')
Разница по параметру САД между двумя группами не доказана. Статистика теста = 0.789104211346105, p-значение = 0.3743711298061947 Разница по параметру ДАД между двумя группами не доказана. Статистика теста = 2.7054287237733887, p-значение = 0.10000719410523369 Разница по параметру СрАД между двумя группами не доказана. Статистика теста = 3.0993025343491, p-значение = 0.07832584439605056 Разница по параметру ЧСС между двумя группами не доказана. Статистика теста = 0.11643911886382965, p-значение = 0.7329291102177846 Разница по параметру ИА между двумя группами не доказана. Статистика теста = 1.6827012673646609, p-значение = 0.1945659039824976 Разница по параметру SpO2 между двумя группами не доказана. Статистика теста = 1.4013909315768618, p-значение = 0.23649082215979317 Разница по параметру Масса тела между двумя группами не доказана. Статистика теста = 0.5132014739655003, p-значение = 0.4737562370529689 Разница по параметру Cl- между двумя группами не доказана. Статистика теста = 1.9764596362236475, p-значение = 0.15976387408359172 Разница по параметру Лактат между двумя группами не доказана. Статистика теста = 0.1919501076089674, p-значение = 0.6612984919167608 По параметру Амилаза наблюдается статистически достоверная разница между двумя группами. Статистика теста = 23.36307258502768, p-значение = 1.3412884804072379e-06 Разница по параметру АЛТ между двумя группами не доказана. Статистика теста = 1.0558792745562107, p-значение = 0.3041569120249382 Разница по параметру АСТ между двумя группами не доказана. Статистика теста = 0.2507335853078321, p-значение = 0.6165590105483493 Разница по параметру АЧТВ между двумя группами не доказана. Статистика теста = 0.31955488822393074, p-значение = 0.5718752636675102 Разница по параметру Инфузия, % от N между двумя группами не доказана. Статистика теста = 3.2274101479296515, p-значение = 0.07241512567509965 По параметру КИ наблюдается статистически достоверная разница между двумя группами. Статистика теста = 44.58962956570288, p-значение = 2.4297524397228827e-11 Разница по параметру Площадь тела между двумя группами не доказана. Статистика теста = 1.1527486425364868, p-значение = 0.28297450085997505 Разница по параметру Диурез, мл/кг между двумя группами не доказана. Статистика теста = 2.2854119663953787, p-значение = 0.1305954615441217
group0 = df_only1['КИ'].drop(df_only1.loc[df_only1['КИ']>800,:].index,axis=0)
group1 = df_noGT['КИ']
alpha = 0.05
test_value, p = stats.kruskal(group0,group1)
if alpha<p:
print(f'Разница по параметру КИ между двумя группами не доказана.')
print(f'\tСтатистика теста = {test_value}, p-значение = {p}')
else:
print(f'По параметру КИ наблюдается статистически достоверная разница между двумя группами.')
print(f'\tСтатистика теста = {test_value}, p-значение = {p}')
По параметру КИ наблюдается статистически достоверная разница между двумя группами. Статистика теста = 44.23698594591091, p-значение = 2.909321225967024e-11
group0 = df[df['OUTCOME']=='Survived']
group1 = df[df['OUTCOME']=='Died']
figure,ax = plt.subplots(len(target_columns[2:-1]),4,figsize=(19,75))
for k,i in enumerate(target_columns[2:-1]):
try:
sns.histplot(group0[i],bins=10,ax=ax[k,0])
interval = np.linspace(0,1,int(group0[i].count()))
x = stats.norm.ppf(np.linspace(0,1,int(group0[i].count())),loc=group0[i].mean(),scale=group0[i].std(ddof=1))
y = np.quantile(group0[i],interval)
sns.lineplot(x = x,y = x,ax=ax[k,1],color='r')
sns.lineplot(x = x,y = y,ax=ax[k,1],color='b')
sns.scatterplot(x = np.linspace(0,int(group0[i].max()),int(group0[i].count())),y = group0[i],ax=ax[k,1],color='grey')
sns.histplot(group1[i],bins=10,ax=ax[k,2])
interval = np.linspace(0,1,int(group1[i].count()))
x = stats.norm.ppf(np.linspace(0,1,int(group1[i].count())),loc=group1[i].mean(),scale=group1[i].std(ddof=1))
y = np.quantile(group1[i],interval)
sns.lineplot(x = x,y = x,ax=ax[k,3],color='r')
sns.lineplot(x = x,y = y,ax=ax[k,3],color='b')
sns.scatterplot(x = np.linspace(0,int(group1[i].max()),int(group1[i].count())),y = group1[i],ax=ax[k,3],color='grey')
ax[k,0].set_title(i+' (выжившие пациенты)')
ax[k,1].set_title(i+' (выжившие пациенты: QQ-plot)')
ax[k,2].set_title(i+' (умершие пациенты)')
ax[k,3].set_title(i+' (умершие пациенты: QQ-plot)')
plt.tight_layout()
except Exception:
ax[k,0].set_title(i+' (выжившие пациенты)')
ax[k,1].set_title(i+' (выжившие пациенты: QQ-plot)')
ax[k,2].set_title(i+' (умершие пациенты)')
ax[k,3].set_title(i+' (умершие пациенты: QQ-plot)')
plt.tight_layout()
pass
Все вместе:
# количество умерших (Died) и выживших (Survived) пациентов
sns.barplot(data = [[i] for i in df.groupby('ID')['OUTCOME'].first().value_counts()[::-1]]);
Описательная статистика: Выжившие пациенты
# описательная статистика выживших пациентов
df[df['OUTCOME']=='Survived'][target_columns[2:-1]].describe().T
| count | mean | std | min | 25% | 50% | 75% | max | |
|---|---|---|---|---|---|---|---|---|
| Возраст | 1232.0 | 10.154795 | 5.538551 | 0.25 | 4.000000 | 12.000000 | 15.000000 | 18.000000 |
| GT | 1232.0 | 0.293831 | 0.455701 | 0.00 | 0.000000 | 0.000000 | 1.000000 | 1.000000 |
| САД | 1232.0 | 112.331981 | 14.082478 | 50.00 | 104.000000 | 110.000000 | 120.000000 | 170.000000 |
| ДАД | 1232.0 | 65.692370 | 11.614174 | 5.00 | 60.000000 | 65.000000 | 73.000000 | 119.000000 |
| СрАД | 1232.0 | 81.238907 | 11.469878 | 30.00 | 73.333333 | 81.333333 | 88.333333 | 117.666667 |
| ЧСС | 1232.0 | 105.797890 | 23.279370 | 24.00 | 90.000000 | 106.000000 | 120.000000 | 180.000000 |
| ИА | 1232.0 | 0.962915 | 0.278175 | 0.20 | 0.772727 | 0.933333 | 1.100000 | 2.800000 |
| SpO2 | 1232.0 | 98.581169 | 2.996055 | 26.00 | 98.000000 | 99.000000 | 100.000000 | 110.000000 |
| Масса тела | 1232.0 | 41.689123 | 23.182670 | 6.00 | 18.000000 | 45.000000 | 60.000000 | 103.000000 |
| Cl- | 1232.0 | 108.456494 | 38.399841 | 0.00 | 103.875000 | 108.000000 | 114.000000 | 1102.000000 |
| Лактат | 1232.0 | 1.263872 | 1.327962 | -1.10 | 0.000000 | 1.200000 | 1.800000 | 25.000000 |
| Амилаза | 1232.0 | 108.360438 | 172.023681 | 0.00 | 19.662500 | 61.000000 | 129.775000 | 2520.000000 |
| АЛТ | 1232.0 | 77.758352 | 147.442066 | 0.00 | 20.500000 | 36.750000 | 71.100000 | 1885.200000 |
| АСТ | 1232.0 | 97.160081 | 198.807334 | 0.00 | 30.000000 | 48.300000 | 83.387500 | 2242.000000 |
| АЧТВ | 1232.0 | 26.167654 | 15.476217 | 0.00 | 24.000000 | 30.000000 | 35.000000 | 125.000000 |
| Инфузия, % от N | 1232.0 | 123.529011 | 54.246247 | 0.00 | 95.026596 | 116.583333 | 142.742529 | 647.916667 |
| КИ | 1232.0 | 5.558620 | 14.590389 | 0.00 | 0.000000 | 2.500000 | 5.000000 | 199.200000 |
| Площадь тела | 1232.0 | 0.952451 | 0.331919 | 0.25 | 0.670000 | 1.030000 | 1.270000 | 1.390000 |
| Диурез, мл/кг | 1232.0 | 55.327892 | 35.223939 | 0.00 | 30.595631 | 46.733333 | 72.500000 | 280.000000 |
Описательная статистика: Умершие пациенты
# описательная статистика умерших пациентов
df[df['OUTCOME']=='Died'][target_columns[2:-1]].describe().T
| count | mean | std | min | 25% | 50% | 75% | max | |
|---|---|---|---|---|---|---|---|---|
| Возраст | 160.0 | 8.526562 | 4.473692 | 0.250000 | 5.250000 | 9.000000 | 13.000000 | 17.000000 |
| GT | 160.0 | 0.543750 | 0.499646 | 0.000000 | 0.000000 | 1.000000 | 1.000000 | 1.000000 |
| САД | 160.0 | 103.037500 | 23.474565 | 45.000000 | 86.500000 | 103.000000 | 117.000000 | 165.000000 |
| ДАД | 160.0 | 58.393750 | 16.823949 | 17.000000 | 46.750000 | 59.500000 | 70.000000 | 99.000000 |
| СрАД | 160.0 | 73.275000 | 18.274426 | 26.333333 | 60.000000 | 73.333333 | 86.833333 | 120.666667 |
| ЧСС | 160.0 | 105.287500 | 25.105410 | 41.000000 | 90.000000 | 106.000000 | 121.250000 | 186.000000 |
| ИА | 160.0 | 1.072014 | 0.384730 | 0.464000 | 0.838539 | 0.990990 | 1.191877 | 3.100000 |
| SpO2 | 160.0 | 96.806250 | 4.984879 | 69.000000 | 98.000000 | 98.000000 | 99.000000 | 100.000000 |
| Масса тела | 160.0 | 32.568750 | 16.142300 | 6.000000 | 20.000000 | 30.000000 | 43.000000 | 75.000000 |
| Cl- | 160.0 | 104.664375 | 45.801353 | 0.000000 | 103.125000 | 114.500000 | 133.250000 | 193.000000 |
| Лактат | 160.0 | 1.350625 | 3.446044 | 0.000000 | 0.000000 | 0.000000 | 1.100000 | 20.000000 |
| Амилаза | 160.0 | 27.372187 | 105.539960 | 0.000000 | 0.000000 | 0.000000 | 0.000000 | 892.000000 |
| АЛТ | 160.0 | 114.610312 | 253.571733 | 0.000000 | 39.375000 | 71.000000 | 113.000000 | 2865.000000 |
| АСТ | 160.0 | 172.093750 | 272.496902 | 0.000000 | 42.100000 | 111.000000 | 183.000000 | 2458.300000 |
| АЧТВ | 160.0 | 22.169375 | 29.838148 | 0.000000 | 0.000000 | 24.000000 | 38.000000 | 162.000000 |
| Инфузия, % от N | 160.0 | 124.882344 | 48.315790 | 0.000000 | 93.714326 | 125.884109 | 147.916667 | 300.176471 |
| КИ | 160.0 | 27.891250 | 85.292433 | 0.000000 | 5.000000 | 8.000000 | 20.000000 | 956.600000 |
| Площадь тела | 160.0 | 0.973625 | 0.347461 | 0.410000 | 0.730000 | 0.970000 | 1.285000 | 1.450000 |
| Диурез, мл/кг | 160.0 | 54.189184 | 35.582893 | 0.000000 | 32.750000 | 45.684524 | 70.857558 | 179.500000 |
Проверка наличия значимой разницы между группами выживших и умерших пациентов
# для сохранения результатов в виде таблицы
columns = ['Вариант','Показатель','Значимость различий','p_value','alpha']
append_list = []
# т.к. выборки разного размера, в одной из них - мало данных, распределение не нормальное (графики ниже), воспользуемся тестом Краскела-Уоллиса
for k,i in enumerate(target_columns[2:-1]):
group0 = df[df['OUTCOME']=='Survived'][i]
group1 = df[df['OUTCOME']=='Died'][i]
alpha = 0.05
test_value, p = stats.kruskal(group0,group1)
if alpha<p:
append_list.append(['Все пациенты',i,'значимость различия не доказана',p,alpha])
else:
append_list.append(['Все пациенты',i,'обнаружены значимые различия',p,alpha])
# количество умерших (0) и выживших (1) пациентов, получавших ГТ
sns.barplot(data = [[i] for i in df[df['GT']==1].groupby('ID')['OUTCOME'].first().value_counts()[::-1]]);
Проверка наличия значимой разницы между группами выживших и умерших пациентов, получавших ГТ
# т.к. выборки разного размера, в одной из них - мало данных, распределение не нормальное (графики ниже), воспользуемся тестом Краскела-Уоллиса
for k,i in enumerate(target_columns[2:-1]):
group0 = df[(df['OUTCOME']=='Survived')&(df['GT']==1)][i]
group1 = df[(df['OUTCOME']=='Died')&(df['GT']==1)][i]
alpha = 0.05
try:
test_value, p = stats.kruskal(group0,group1)
if alpha<p:
append_list.append(['Получали ГТ',i,'значимость различия не доказана',p,alpha])
else:
append_list.append(['Получали ГТ',i,'обнаружены значимые различия',p,alpha])
except Exception:
pass
# количество умерших (0) и выживших (1) пациентов, не получавших ГТ
sns.barplot(data = [[i] for i in df[df['GT']==0].groupby('ID')['OUTCOME'].first().value_counts()[::-1]]);
Проверка наличия значимой разницы между группами выживших и умерших пациентов, неполучавших ГТ
# т.к. выборки разного размера, в одной из них - мало данных, распределение не нормальное (графики ниже), воспользуемся тестом Краскела-Уоллиса
for k,i in enumerate(target_columns[2:-1]):
group0 = df[(df['OUTCOME']=='Survived')&(df['GT']==0)][i]
group1 = df[(df['OUTCOME']=='Died')&(df['GT']==0)][i]
alpha = 0.05
try:
test_value, p = stats.kruskal(group0,group1)
if alpha<p:
append_list.append(['Не получали ГТ',i,'значимость различия не доказана',p,alpha])
else:
append_list.append(['Не получали ГТ',i,'обнаружены значимые различия',p,alpha])
except Exception:
pass
# т.к. выборки разного размера, в одной из них - мало данных, распределение не нормальное (графики ниже), воспользуемся тестом Краскела-Уоллиса
for k,i in enumerate(target_columns[2:-1]):
group0 = df[(df['OUTCOME']=='Survived')&(df.Day==1)][i]
group1 = df[(df['OUTCOME']=='Died')&(df.Day==1)][i]
alpha = 0.05
test_value, p = stats.kruskal(group0,group1)
if alpha<p:
append_list.append(['Все пациенты, 1й день',i,'значимость различия не доказана',p,alpha])
else:
append_list.append(['Все пациенты, 1й день',i,'обнаружены значимые различия',p,alpha])
# т.к. выборки разного размера, в одной из них - мало данных, распределение не нормальное (графики ниже), воспользуемся тестом Краскела-Уоллиса
for k,i in enumerate(target_columns[2:-1]):
group0 = df[(df['OUTCOME']=='Survived')&(df.Day==1)&(df.GT==1)][i]
group1 = df[(df['OUTCOME']=='Died')&(df.Day==1)&(df.GT==1)][i]
alpha = 0.05
try:
test_value, p = stats.kruskal(group0,group1)
if alpha<p:
append_list.append(['Получали ГТ, 1й день',i,'значимость различия не доказана',p,alpha])
else:
append_list.append(['Получали ГТ, 1й день',i,'обнаружены значимые различия',p,alpha])
except Exception:
pass
# т.к. выборки разного размера, в одной из них - мало данных, распределение не нормальное (графики ниже), воспользуемся тестом Краскела-Уоллиса
for k,i in enumerate(target_columns[2:-1]):
group0 = df[(df['OUTCOME']=='Survived')&(df.Day==1)&(df.GT==0)][i]
group1 = df[(df['OUTCOME']=='Died')&(df.Day==1)&(df.GT==0)][i]
alpha = 0.05
try:
test_value, p = stats.kruskal(group0,group1)
if alpha<p:
append_list.append(['Не получали ГТ, 1й день',i,'значимость различия не доказана',p,alpha])
else:
append_list.append(['Не получали ГТ, 1й день',i,'обнаружены значимые различия',p,alpha])
except Exception:
pass
Результаты проведенного анализа по исходам заболеваний
df_results = pd.DataFrame(append_list)
df_results.columns = columns
df_results.pivot(columns = 'Вариант',index = 'Показатель',values = 'Значимость различий').replace({'обнаружены значимые различия':'+','значимость различия не доказана':'-',}).drop('GT',axis=0)
| Вариант | Все пациенты | Все пациенты, 1й день | Не получали ГТ | Не получали ГТ, 1й день | Получали ГТ | Получали ГТ, 1й день |
|---|---|---|---|---|---|---|
| Показатель | ||||||
| Cl- | + | - | + | - | + | - |
| SpO2 | + | + | + | + | + | + |
| АЛТ | + | + | + | - | + | - |
| АСТ | + | - | - | - | + | - |
| АЧТВ | + | - | + | - | - | - |
| Амилаза | + | - | + | - | + | - |
| Возраст | + | - | - | - | + | - |
| ДАД | + | + | + | - | + | + |
| Диурез, мл/кг | - | - | - | - | - | - |
| ИА | + | - | - | - | + | - |
| Инфузия, % от N | - | + | - | - | - | + |
| КИ | + | + | + | + | + | + |
| Лактат | + | - | + | - | + | - |
| Масса тела | + | - | - | - | + | - |
| Площадь тела | - | - | - | - | + | + |
| САД | + | + | + | - | + | + |
| СрАД | + | + | + | - | + | + |
| ЧСС | - | - | - | - | - | - |